package br.edu.ufc.deti.broker.services;

import br.edu.ufc.deti.broker.execucao.NgcExecucao;
import br.edu.ufc.deti.broker.negocio.autenticacao.NgcAutenticacao;

/**
 * Classe que serve de Front-Controller para os serviços disponibilizados pelo Web Service
 * 
 * @since June 21, 2010.
 * @author Rafael Braga.
 */
public class ServicesFacade {

	long inicio, fim;
	/**
	 * Variável estática necessária para implementar o Singleton.
	 */
	private static ServicesFacade instance = new ServicesFacade();
	
	/**
	 * Método contrutor que teve sua visibilidade reduzida afim de
	 * implementar o Singleton.
	 */
	private ServicesFacade() {}

	/**
	 * Método responsável por entregar a única instância dessa classe a terceiros.
	 * @return Objeto do tipo ServicesFacade.
	 */
	public static ServicesFacade getInstance() {
		return instance;
	}
	
	public String executaAplicacao_Recurso( String user, String password, String xml ) {
		NgcExecucao execucao = new NgcExecucao(xml);
		String xmlRetorno = execucao.executaAplicacao_Recurso();
		return xmlRetorno;
	}
	
	public String executaAplicacao_Recursos( String user, String password, String xml ) {
		inicio = System.currentTimeMillis();
		System.out.println("***************** Inicio da Execução ******************");
		NgcExecucao execucao = new NgcExecucao(xml);
		String xmlRetorno = execucao.executaAplicacao_Recursos();
		System.out.println("***************** Final da Execução ******************");
		fim = System.currentTimeMillis();
		System.out.println("tempo de execução....:"+(fim-inicio)+"  milisegundos");
		return xmlRetorno;
	}

	public String autenticaUsuario(String xml) {
		NgcAutenticacao autenticacao = new NgcAutenticacao();
		return autenticacao.autenticaUsuario(xml);
	}
}
